我相信新的C++标准允许枚举类型有一个额外的“作用域”:enumE{e1,e2};Evar=E::e1;因为我知道很多包含旧C风格枚举类型定义的源文件,我想知道新标准是否允许对这些匿名枚举类型使用类型定义:typedefenum{d1,d2}D;Dvar=D::d1;//error? 最佳答案 新标准将添加一种新型的强枚举,但语法会略有不同,旧式枚举将兼容(C++03中的有效代码将是有效的C++0x代码)因此您将不需要做任何事情来保持遗留代码有效(不是typedef,不是其他任何东西)。enumclassE{e1,e2};//new
下面的代码将在enumen=A::en;行给出编译错误,但它描述了我想做的事情(使A的嵌套枚举成为也是B的嵌套枚举)。#includeusingnamespacestd;structA{enuma_en{X=0,Y=1};};structB{enumb_en=A::a_en;//syntaxerror};intmain(){cout所以问题是我如何在C++中做这样的事情? 最佳答案 将枚举放在A和B都可以继承的基类中。 关于c++-如何将一个类的嵌套枚举用作另一个类的嵌套枚举?,我们在S
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。根据我的经验,现实世界很少提供非负整数的索引。许多事情甚至没有用数字表示。许多用数字表示索引的东西的索引不是从0开始的。那为什么我们仍然局限于整数索引数组?也许我错了,但枚举索引数组似乎通常比数字索引数组更合适(因为枚举通常更准确,是“真实世界”的表示形式)。虽然枚举通常可以相对容易地转换为C风格的数组索引......enumWeekday={SUNDA
我在定义和特化成员函数时遇到困难update()内部类的Outer::Inner以非类型(枚举)参数为模板。#includetemplatestructOuter{structInner{enumType{A,B,C};templatevoidupdate();};};//Definitiontemplatetemplate::Inner::TypeT2>voidOuter::Inner::update(){}//Specializationtemplatetemplate::Inner::A>voidOuter::Inner::update(){}intmain(){returnEX
在gcc-4.5下打印0,在gcc-4.6下打印1。#includeenumVenueId:char{};intmain(intargc,char**argv){VenueIdv=(VenueId)'P';std::cout 最佳答案 根据标准,VenuedId具有char类型作为基础类型,因此v应包含char'P',v=='P'应该产生true。§7.2枚举声明Eachenumerationdefinesatypethatisdifferentfromallothertypes.Eachenumerationalsohasanun
Thisdocumentation州Ifyouwanttoregisteranenumthatisdeclaredinanotherclass,theenummustbefullyqualifiedwiththenameoftheclassdefiningit.Inaddition,theclassdefiningtheenumhastoinheritQObjectaswellasdeclaretheenumusingQ_ENUMS().但是在下面的例子中我无法做到这一点。A类:#ifndefCLASSA_H#defineCLASSA_H#includeclassClassA:publ
我想知道是否有某种方法可以使用枚举来初始化vector。枚举是必需的,因为我正在创建一个对象vector(相同的类,Chess_piece,但类型不同)。我希望能够在不进行大量测试的情况下访问该元素(if(thisiswhitepawn8)...)。枚举可用于以一种很好的方式逐项列出片段vec(W_PAWN8)....无论如何,当我创建vector时,我会做这样的事情(伪代码)//generateenumofpiecesenumpieceList{...}pieceEnum;vectorpieceIter={W_PAWN1,W_PAWN2,...};//equalto{1,2,...}
我被MSVC意外的C++函数匹配所困扰。我可以将其简化为以下测试用例:#includeenumCode{aaa,bbb};structMyVal{Codec;MyVal(Codec):c(c){}};voidtest(inti,MyValval){std::cout我预计test的所有7次调用都将匹配第一个重载,并且GCC(liveexample)和Clang(liveexample)按预期匹配:case1:value0case2:value0case3:value1case4:value0case5:value0case6:value0case7:value1但MSVC(liveex
考虑一个导出枚举的C++类,在该枚举上维护一个内部数组,并希望导出一个从枚举中接受值的命令。classfoo{public:enumcolor{red,yellow,green,NUM_COLORS};private:somethingsomebody[NUM_COLORS];public:voidcommand(colorc);};是否有一种干净的方法可以仅导出实际颜色,而不导出NUM_COLORS种颜色?当编译器的类型系统真的应该能够为我做这件事时,我不想在每次调用时都检查边缘情况。明显的hack是:classfoo{public:enumcolor{red,yellow,gree
只是因为我不知道在我的C++书籍或google上到底在哪里可以找到它。我实际上如何在类中定义一些枚举(在本例中为{left=1,right=2,top=3,bottom=4})。我希望能够将此枚举作为参数而不是整数传递给成员函数,因此在外部使用枚举...有没有办法可以做到这一点,或者有没有更好的方法可以使枚举仅针对该类?这是无效的代码,显示enummySprite::myySprite::sidemembermySprite"mySprite::side"isnotatypename出于某种原因:classmySprite:publicsf::Sprite{public:enum{le